package com.steellee.leeexcel;

import com.steellee.leeexcel.dto.MetaExcelReadDTO;
import com.steellee.leeexcel.msg.JSONMessage;
import com.steellee.leeexcel.service.PaExcelReadForMapStart;
import com.steellee.leeexcel.service.PaExcelReadStart;


import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

/**
 * 基于 excel文件读场景
 *
 * @author steellee
 * @date 2023-02-17
 **/
public class PaExcelRead {
    /**
     * 支持读取 excel多个 sheet数据, 通过对象MetaExcelReadDTO列表传递参数 (并支持带 heads字段映射)
     *
     * @param excelInputStream excel文件输入流
     * @param param            入参数据对象集合
     * @return 返回 Map类型 json
     */
    public JSONMessage readForMap(InputStream excelInputStream, List<MetaExcelReadDTO> param) {
        return new PaExcelReadForMapStart().readForMap(excelInputStream, param);
    }

    /**
     * 拆分数据解析-只做数据校验
     *
     * @param param        入参数据对象 list
     * @param data         数据解析全量数据
     * @param outputStream 返回文件流
     **/

    public JSONMessage mapDataCheck(List<MetaExcelReadDTO> param, Map<String, Object> data, OutputStream outputStream, InputStream tempInputStream) {
        return new PaExcelReadForMapStart().checkAndReturn(param, data, outputStream, tempInputStream);
    }

    /**
     * 拆分数据解析-只做数据解析+行数校验
     *
     * @param excelInputStream  excel文件输入流
     * @param metaExcelReadDTOS 入参数据对象 list
     * @return 返回指定对象类型 Json
     */
    public JSONMessage readForObj(InputStream excelInputStream, List<MetaExcelReadDTO> metaExcelReadDTOS) {
        return new PaExcelReadStart().read(excelInputStream, metaExcelReadDTOS);
    }

    /**
     * 拆分数据解析-只做数据校验
     *
     * @param param        入参数据对象 list
     * @param data         数据解析全量数据
     * @param outputStream 返回文件流
     **/

    public JSONMessage objDataCheck(List<MetaExcelReadDTO> param, Map<String, Object> data
            , OutputStream outputStream, InputStream tempInputStream) {
        return new PaExcelReadStart().checkAndReturn(param, data, outputStream, tempInputStream);
    }
}